// 将数组当作队列来使用

// 用一个数组充当空队列
const queue = [];

console.log('- - - 以数组开始位置为队列头，以数组末尾为队列尾 - - -');

queue.push('李渊' ,'李世民');
queue.push('李治', '武则天');
console.log( queue );
queue.push( '李显' );
console.log( queue );

// Array.prototype.shift() 
// 作用: 移除并返回数组首个元素；所数组为空则返回 undefined
console.log( queue.shift() );
console.log( queue );
console.log( queue.shift() );
console.log( queue );
console.log( queue.shift() );
console.log( queue );

// 获取数组中第一个元素
Array.prototype.peekFirst = function() {
    if( this.length > 0 ) {
        return this[0];
    }
}

console.log( queue.peekFirst() );
console.log( queue );

console.log('- - - 以数组末尾为队列头，以数组开始位置为队列尾 - - -');

// 向队列尾部追加元素 (实际是向数组开始位置依次添加元素)
queue.unshift('李显', '李旦');
console.log( queue );
// 获取并移除队列头 (实际是获取并删除数组末尾元素)
console.log( queue.pop() );
console.log( queue );

// 获取数组末尾的元素
Array.prototype.peekLast = function(){
    if( this.length > 0 ) {
        return this[ this.length - 1 ];
    }
}

console.log( queue.peekLast() );
console.log( queue );

// 总结:
// Array.prototype.unshift(...items) 依次向数组起始位置插入元素
// Array.prototype.shift() 移除并返回数组首个元素
// Array.prototype.push(...items) 依次向数组末尾追加元素
// Array.prototype.pop() 移除并返回数组末尾的元素